<?php

namespace app\admin\controller;
use think\Image;
use think\Controller;
use think\Request;
use think\Db;
//验证器
use think\Validate;
//分页功能
use think\Paginator;
use think\Paginator\driver\Bootstrap;

class Article extends AdminController
{
   //展示页面
    public  function index()
    {    
        //计算总条数  然后计算出尾页
        $g= Db::name('article') 
                   ->field('count(id)')
                    ->select();
        $count=$g[0]['count(id)'];
        // $Page = new Page($count,5);// 实例化分页类 
        // 页面分页
        $article = db('article');
        $list = $article->order('id asc')
                         ->paginate(3, false,['query'=>request()->param()])
                         ->each(function($item, $key){
        $item['time'] = date('Y-m-d H:i:s', $item['time']);
        return $item;
    });
        $page = $list->render();
        $this->assign('list', $list);
        $this->assign('page', $page);
        

      $data = Db::name('article')
                ->order('id desc')
                ->paginate(3,$count);
     $a = [];           
    foreach ($data as $v) {
            $b=date('Y-m-d',$v['time']);
            $c = array_push($v,$b);
            $d = Db::name('sort')
                   ->field('sort')
                   ->where('id',$v['sid'])
                   ->find();
            $e = array_push($v,$d['sort']);
             $a[] = $v;
        }
       // var_dump($a);die;
        return view('',[
             'data'=>$a,
             'list'=>$list,
             'page'=>$page,
            ]);
        
    }

    //执行搜索
    public function search(){
     
        //接收数据
        $p = input();
        $res=$p['title'];
        $e = '/ /';
        if(empty($res)||preg_match($e, $res)){
          return $this ->error('亲,请填写你要搜索的正确内容',url('admin/article/index'));
        }
       
       $data = Db::name('article')
                ->where('title','like','%'.$res.'%')
                ->order('id desc')
                ->paginate(3);
      if(empty($data)){
        return $this->error('搜索的数据不存在,请重试');
      }
      $a = [];           
      foreach ($data as $v) {
            $b=date('Y-m-d',$v['time']);
            $c = array_push($v,$b);
            $d = Db::name('sort')
                   ->field('sort')
                   ->where('id',$v['sid'])
                   ->find();
            $e = array_push($v,$d['sort']);
             $a[] = $v;
        }
          //页面分页
        $article = db('article');
        $list = $article
              ->where('title','like','%'.$res.'%')
              ->order('id asc')
              ->paginate(3, false,['query'=>request()->param()])
              ->each(function($item, $key){
        $item['time'] = date('Y-m-d H:i:s', $item['time']);
      
        return $item;
    });
        $page = $list->render();
        $this->assign('list', $list);
        $this->assign('page', $page);
        //计算总条数  然后计算出尾页  
       return view('article/index',[
             'data'=>$a,
             'list'=>$list,
             'page'=>$page,
            ]);
    }
    //执行新增
     public function add()
     {  

         $t=Db::field('sort')
             ->name('sort')
             ->select();
        $e=[];
       foreach ($t as $key => $j) {
         foreach ($j as $k => $s) {
           $e[] = $s;
         }
       }
       
        return View('',[
            'e' =>$e
             ]);
     } 
     //提交新增数据
     public function save(Request $request)
    {
      //提交数据加图片
       $p = $request->post(); 
        //验证
       $rule = [
          'title' => 'require|max:25|chsDash',
          'abstract'=>'require|max:200',
          'author' => 'require|max:25|chsDash',
          'matter'=>'require',
      ];

       $msg = [
      'title.require' => '文章题目不能为空',
      'title.max' => '文章名称过长',
      'title.chsDash'=>'文章题目只能是汉字、字母、数字和下划线_及破折号-',
       'abstract.require'=>'简介不能为空',
      'author.require' => '作者不能为空',
      'author.max' => '作者名称过长',
      'author.chsDash'=>'作者名称只能是汉字、字母、数字和下划线_及破折号-',
      'matter.require'=>'文章内容不能为空',
      ];
       $a=['sort'=>$p['sort']];
       // var_dump($a);die;
       if($p['sort']==='option1'){
        return $this->error('添加的类型不能为空');
       }
       // var_dump($p);die;
    //获取其他数据
      $data = ['title'=>$p['title'],
              'author'=>$p['author'],
              'matter'=>$p['matter'],
              'abstract'=>$p['abstract']
                ];
      $data['time']=time();
      $res = Db::name('sort')
                 ->where('sort',$a['sort'])
                 ->find();
      $data['sid']=$res['id'];

    //进行数据判断(不能为空)
     

      $validate = new Validate($rule,$msg);
      if(!$validate->check($data)){
      $this->error($validate->getError());
      }
      

    // 获取表单上传文件 例如上传了001.jpg
      $file = request()->file('picture');
        //校验器，判断图片格式是否正确
        if (true !== $this->validate(['picture' => $file], ['picture' => 'require|image'])) {
            $this->error('请选择图像文件');
        } else {
            // 移动到框架应用根目录/public/uploads/ 目录下
            $info = $file->validate(['size'=>200000,'ext'=>'jpg,png,gif'])
                         ->move(ROOT_PATH . 'public' . DS . 'uploads');
        // var_dump($info);die;
            if ($info) {
                // 成功上传后 获取上传信息
                //存入相对路径/upload/日期/文件名
                $res = DS . 'uploads' . DS . $info->getSaveName();
                // var_dump($res);die; 
                $data['picture'] = $res;
                //模板变量赋值
                $this->assign('picture', $res);
                // return $this->fetch('index');
                //把数据插入数据库
                $result = Db::name('article')
                            ->data($data)
                            ->insert();
                if($result > 0){
                    return $this ->success('添加成功',url('admin/article/index'));
                }else{

                    return $this->error('添加失败,请重试');
                }

            } else {
                // 上传失败获取错误信息
                echo $file->getError();
                return $this->error('请重试');
            }
        }
    }

    //内容详情(details)
    public function  details($id)
    {

      //查数据 遍历到页面
      $data = Db::name('article')
               ->where('id ='.$id)
               ->find();
       $data['time']=date('Y-m-d',$data['time']);
// var_dump($data);die;
        // var_dump($data);die;
       return view('',[
         'data'=>$data
          ]);
    }
    //编辑文章(edit)
    public function edit($id)
    {
        //查数据
         
         $res = Db::name('article')
                ->select($id);

        $b=Db::field('sort')
              ->name('sort')
              ->where('id='.$res[0]['sid'])
              ->find();
              // var_dump($b);die;
        $data = [
        'id'=>$res[0]['id'],
        'title'=>$res[0]['title'],
        'time'=>date('Y-m-d',$res[0]['time']),
        'author'=>$res[0]['author'],
        'picture'=>$res[0]['picture'],
        'matter'=>$res[0]['matter'],
        'abstract'=>$res[0]['abstract'],
        'sort'=>$b['sort']
        ];
       return view('',[
         'data'=>$data,
          ]);
    }

     //更新编辑文章的信息

      public  function update(Request $request,$id)
    {
        //提交数据加图片
       $p = $request->post();
       // var_dump($p);die;
        $a=['sort'=>$p['sort']];
       // var_dump($a);die;
       if($p['sort']==='option1'){
        return $this->error('添加的类型不能为空');
       }
    //获取其他数据
       $data = ['title'=>$p['title'],
                 'author'=>$p['author'],
                 'matter'=>$p['matter'],
                 'time'=>strtotime( $p['time']),
                 'abstract'=>$p['abstract']
                ];
        $h=Db::name('sort')
             ->where('sort',$a['sort'])
             ->find();
        $data['sid']=$h['id'];
        //验证
       $rule = [
          'title' => 'require|max:25',
          'abstract'=>'require',
          'author' => 'require|max:25',
          'author'=>'chsDash',
          'abstract'=>'require',
          'matter'=>'require',
      ];

       $msg = [
      'title.require' => '文章题目不能为空',
      'title.max' => '文章名称过长',
      'author.require' => '作者不能为空',
      'author.max' => '作者名称过长',
      'author.chsDash'=>'作者名称只能是汉字、字母、数字和下划线_及破折号-',
      'abstract.require'=>'简介不能为空',
      'matter.require'=>'文章内容不能为空',
      ];

      $validate = new Validate($rule,$msg);
      if(!$validate->check($data)){
      $this->error($validate->getError());
      }
    // 获取表单上传文件 例如上传了001.jpg
      $file = request()->file('picture');
      // var_dump($file);die;
      
      //判断选择上传的图片是否为空
      if(!empty($file)){
        //校验器，判断图片格式是否正确
        if (true !== $this->validate(['picture' => $file], ['picture' => 'require|image'])) {
            $this->error('请选择图像文件');
        } else {
            // 移动到框架应用根目录/public/uploads/ 目录下
            $info = $file->validate(['size'=>200000,'ext'=>'jpg,png,gif'])
                         ->move(ROOT_PATH . 'public' . DS . 'uploads');
        // var_dump($info);die;
            if ($info) {
                // 成功上传后 获取上传信息
                //存入相对路径/upload/日期/文件名
                $res = DS . 'uploads' . DS . $info->getSaveName();
                // var_dump($res);die; 
                $data['picture'] = $res;
                //模板变量赋值
                $this->assign('picture', $res);
                // return $this->fetch('index');
                //把数据插入数据库
                $result = Db::name('article')
                            ->where(['id'=> $id])
                            ->update($data);
                           
                if($result > 0){
                    return $this ->success('编辑成功',url('admin/article/index'));
                }else{

                    return $this->error('编辑失败,请重试');
                }

            } else {
                // 上传失败获取错误信息
                 echo $file->getError();
                 return $this->error('请重试');
            }
        }

        }else{
              //如果选择的是空的,默认图片为以前的图片
                // var_dump($data);die;
                 $result = Db::name('article')
                            ->where(['id'=> $id])
                            ->update($data);
                           
                if($result > 0){
                    return $this ->success('编辑成功',url('admin/article/index'));
                }else{

                    return $this->error('编辑失败,请重试');
                }
        }
      }
    
      //删除该文章
     public function delete($id)
     {  
        $a = Db::name('comment')
                ->where('artid',$id)
                ->select();
        if(empty($a)){
       $res = Db::name('article')
                 ->delete($id);
       // var_dump($res);die;
         if( $res > 0){
            $this->success('删除成功',url('admin/article/index')); 
        }else{
            $this->error('删除失败,请重新删除');
        }
       }else{
        $b = Db::name('comment')
               ->where('artid',$id)
               ->delete();
          $res = Db::name('article')
                 ->delete($id);
          if( $res > 0 && $b>0){
            $this->success('删除成功',url('admin/article/index')); 
        }else{
            $this->error('删除失败,请重新删除');
        }
       }
     }
    //评论部分
    public function comment($id)
    {   
        //页面分页
        $comment = db('comment');
        $list = $comment->order('id asc')->paginate(5, false,['query'=>request()->param()])->each(function($item, $key){
        $item['time'] = date('Y-m-d H:i:s', $item['time']);
        return $item;
    });
        $page = $list->render();
        $this->assign('list', $list);
        $this->assign('page', $page);

        //查出所有评论表里面该文章的数据
        $res = Db::name('comment')
                 ->where('artid',$id)
                 ->paginate(5);
         $a=[];
        foreach ($res as $v) {
            //给数组放时间格式的时间
           $b=date('Y-m-d',$v['time']);
           $c = array_push($v,$b);
           //给数组放用户名字
           $d=Db::name('vip')
                ->field('username')
                ->where('uid',$v['uid'])
                ->find();
          $e = array_push($v,$d['username']);
          //给数组放文章名字
           $f=Db::name('article')
                 ->field('title')
                 ->where('id',$v['artid'])
                 ->find();
          $g = array_push($v,$f['title']);
            $a[] = $v;
        };
        // var_dump($a);die;
        return View('',[
            'data'=>$a,
            'page'=>$page,
            'list'=>$list
             ]);
    }

    //评论删除
    public function comdelete($id)
    {
        $res = Db::name('comment')
                 ->delete($id);
        // var_dump($res);die;
         if($res >0){
            $this->success('删除成功',url('admin/article/index')); 
        }else{
            $this->error('删除失败,请重新删除');
        }
    }

    //修改评论状态(√  ×)
    public function dostatus($id)
    {
        //查询该条评论的状态
        $res = Db::name('comment')
                 ->field('status')
                 ->where('id',$id)
                 ->find();
  
         $res['status'] = $res['status']  == 1?2:1;
         $a=Db::name('comment')
               ->where('id',$id)
               ->update($res);

         if($res >0){
            $this->success('修改成功'); 
        }else{
            $this->error('修改失败');
        }

}
}